#!/bin/bash

set -x
set -u

check_evo_start_pid=$(pgrep evolution -l | grep evolution$ | awk '{print $1}')
if [[ ! -z $check_evo_start_pid ]]; then
kdialog --warningyesno 'Почтовый клиент на текущий момент запущен!\nЗавершить работу клиента и продолжить настройку почты ?' --yes-label 'Продолжить настройку' --no-label 'Отмена настройки' --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
if [ $? -eq 0 ]; then kill -15 $check_evo_start_pid;
else kdialog --passivepopup 'Отмена настройки почты!' 3 --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'; exit 1
fi
fi

CONF_PATH="$HOME/.config/evolution/sources"
RAND_PAR_NAME_EWS=$(echo 0-ews-outlook-$RANDOM)
RAND_NAME_EWS1=$(echo 0-ews-outlook-$RANDOM)
RAND_NAME_EWS2=$(echo 0-ews-outlook-$RANDOM)
RAND_NAME_EWS3=$(echo 0-ews-outlook-$RANDOM)
EWS_FILE1_PATH="$HOME/.config/evolution/sources/$RAND_PAR_NAME_EWS.source"
EWS_FILE2_PATH="$HOME/.config/evolution/sources/$RAND_NAME_EWS1.source"
EWS_FILE3_PATH="$HOME/.config/evolution/sources/$RAND_NAME_EWS2.source"
EWS_FILE4_PATH="$HOME/.config/evolution/sources/$RAND_NAME_EWS3.source"
SERVER_URL='owa.mos.ru'
EWS_URL='https://owa.mos.ru/EWS/Exchange.asmx'
AUTH_METHOD='NTLM'
EWS_PORT='443'

func_creds() {
	EMAIL_ADDRESS=$(kdialog --inputbox 'Введите адрес вашей электронной почты ЕПС ПМ (например, ivanovii@it.mos.ru)' --title 'Настройка почты' --yes-label 'Ввод' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg')
	if [ $? -ne 0 ]; then kdialog --passivepopup 'Отмена настройки почты!' 3 --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'; exit 1
	else
		check3=$(echo $EMAIL_ADDRESS | grep -iE '(^[a-z].*@[a-z].*$|^[0-9].*@[a-z].*$)')
		if [[ $? -ne 0 ]] || [[ -z $EMAIL_ADDRESS ]]; then kdialog --error 'Ошибка! Не является e-mail адресом или пустая строка!' --title 'Настройка почты' --ok-label 'Повторить ввод' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'; func_creds; fi
		LOGIN=$(echo $EMAIL_ADDRESS | awk -F '@' '{print $1}')
		DISPLAY_NAME=$EMAIL_ADDRESS
	fi
}

ews_file1_ex() {
cat << EOF > $EWS_FILE1_PATH
[Data Source]
DisplayName=$DISPLAY_NAME
Enabled=true
Parent=
Populated=false

[Offline]
StaySynchronized=true

[Authentication]
Host=$SERVER_URL
Method=$AUTH_METHOD
Port=$EWS_PORT
ProxyUid=system-proxy
RememberPassword=true
User=$LOGIN
CredentialName=$LOGIN
IsExternal=false

[Collection]
BackendName=ews
CalendarEnabled=true
ContactsEnabled=true
Identity=$LOGIN
MailEnabled=true
CalendarUrl=
ContactsUrl=
AllowSourcesRename=true

[Security]
Method=none

[Ews Backend]
FilterInbox=true
StoreChangesInterval=3
LimitByAge=false
LimitUnit=years
LimitValue=1
CheckAll=true
ListenNotifications=true
Email=$EMAIL_ADDRESS
FilterJunk=true
FilterJunkInbox=false
GalUid=
Hosturl=$EWS_URL
Oaburl=
OabOffline=false
OalSelected=
Timeout=120
UseImpersonation=false
ImpersonateUser=
OverrideUserAgent=false
UserAgent=Microsoft Office/14.0 (Windows NT ,5.1; Microsoft Outlook 14.0.4734; Pro)
OverrideOauth2=true
Oauth2Tenant=common
Oauth2ClientId=
Oauth2RedirectUri=
Oauth2ResourceUri=
Oauth2EndpointHost=login.microsoftonline.com
ShowPublicFolders=true
ConcurrentConnections=1
SyncTagStamp=0
EOF
}

ews_file2_ex() {
cat << EOF > $EWS_FILE2_PATH
[Data Source]
DisplayName=$DISPLAY_NAME
Enabled=true
Parent=$RAND_PAR_NAME_EWS
Populated=true

[Refresh]
Enabled=true
IntervalMinutes=1

[Mail Account]
BackendName=ews
IdentityUid=$RAND_NAME_EWS2
ArchiveFolder=folder://$RAND_NAME_EWS1/%d0%90%d1%80%d1%85%d0%b8%d0%b2
NeedsInitialSetup=false
MarkSeen=inconsistent
MarkSeenTimeout=1500

[Exchange Web Services Folder]
ChangeKey=
Id=
Foreign=false
ForeignSubfolders=false
ForeignMail=
FreebusyWeeksBefore=1
FreebusyWeeksAfter=5
Public=false
UsePrimaryAddress=false
FetchGalPhotos=false
Name=

[Authentication]
Host=
Method=none
Port=0
ProxyUid=system-proxy
RememberPassword=true
User=$LOGIN
CredentialName=
IsExternal=false
EOF
}

ews_file3_ex() {
cat << EOF > $EWS_FILE3_PATH
[Data Source]
DisplayName=$DISPLAY_NAME
Enabled=true
Parent=$RAND_PAR_NAME_EWS
Populated=false

[Mail Composition]
Bcc=
Cc=
DraftsFolder=folder://$RAND_NAME_EWS1/%d0%a7%d0%b5%d1%80%d0%bd%d0%be%d0%b2%d0%b8%d0%ba%d0%b8
ReplyStyle=default
SignImip=true
TemplatesFolder=folder://$RAND_NAME_EWS1/%d0%a8%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%8b
StartBottom=inconsistent
TopSignature=inconsistent
Language=

[Mail Identity]
Address=$EMAIL_ADDRESS
Aliases=
Name=$DISPLAY_NAME
Organization=
ReplyTo=
SignatureUid=

[Mail Submission]
SentFolder=folder://$RAND_NAME_EWS1/%d0%9e%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5
TransportUid=$RAND_NAME_EWS3
RepliesToOriginFolder=false
UseSentFolder=true

[Pretty Good Privacy (OpenPGP)]
AlwaysTrust=false
EncryptToSelf=true
KeyId=
SigningAlgorithm=
SignByDefault=false
EncryptByDefault=false
PreferInline=false

[Message Disposition Notifications]
ResponsePolicy=ask

[Secure MIME (S/MIME)]
EncryptionCertificate=
EncryptByDefault=false
EncryptToSelf=true
SigningAlgorithm=
SigningCertificate=
SignByDefault=false

[Exchange Web Services Folder]
ChangeKey=
Id=
Foreign=false
ForeignSubfolders=false
ForeignMail=
FreebusyWeeksBefore=1
FreebusyWeeksAfter=5
Name=
Public=false
UsePrimaryAddress=false
FetchGalPhotos=true
EOF
}

ews_file4_ex() {
cat << EOF > $EWS_FILE4_PATH
[Data Source]
DisplayName=$DISPLAY_NAME
Enabled=true
Parent=$RAND_PAR_NAME_EWS
Populated=true

[Mail Transport]
BackendName=ews

[Exchange Web Services Folder]
ChangeKey=
Id=
Foreign=false
ForeignSubfolders=false
ForeignMail=
FreebusyWeeksBefore=1
FreebusyWeeksAfter=5
Name=
Public=false
UsePrimaryAddress=false
FetchGalPhotos=true
EOF
}

func_ews() {
if [ ! -d $CONF_PATH ]; then mkdir -p $CONF_PATH; fi
ews_file1_ex
ews_file2_ex
ews_file3_ex
ews_file4_ex
}

func_check_inst_evo() {
	check1=$(rpm -qa | grep 'evolution-[0-9]')
	if [ $? -ne 0 ]; then
		kdialog --error 'Почтовый клиент не установлен!\n\nНеобходимо обратиться в техподдержку, контакты:\nтел.: 75555 (внутренний); +7(495)989-8025 (городской)' --ok-label 'Выход' --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
		exit 1
	else
		kdialog --passivepopup 'Почтовый клиент установлен' 3 --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
	fi
}

func_check_inst_ews() {
	check2=$(rpm -qa | grep 'evolution-ews')
	if [ $? -ne 0 ]; then
		kdialog --error 'Плагин EWS не установлен!\n\nНеобходимо обратиться в техподдержку, контакты:\nтел.: 75555 (внутренний); +7(495)989-8025 (городской)' --ok-label 'Выход' --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
		exit 1
	else
		kdialog --passivepopup 'Плагин EWS установлен' 3 --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
	fi
}

kdialog --yesno 'Программа предназначена для автоматического создания конфигурации п/я ЕПС ПМ в почтовом клиенте' --title 'Настройка почты' --yes-label 'Начать настройку' --no-label 'Отмена' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
if [ $? -ne 0 ]; then kdialog --passivepopup 'Отмена настройки почты!' 3 --title 'Настройка почты' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'; exit 1; fi
sleep 1
func_check_inst_evo
func_check_inst_ews
func_creds
func_ews
sleep 1
kdialog --msgbox 'Настройка выполнена. Нажмите ОК, чтобы запустить почтовый клиент и войти в почту!' --title 'Настройка почты' --ok-label 'OK' --icon '/usr/share/icons/hicolor/scalable/apps/mostech-postprofile-gui.svg'
evolution --online
exit 0
